﻿using System;
using System.DirectoryServices;
using ActiveDs;

namespace Library
{
  #region IDirectoryインターフェイス
  /// <summary>
  /// Directory オブジェクトのプロパティを定義します。
  /// </summary>
  public interface IDirectory : IDisposable
  {
    /// <summary>
    /// 説明を取得または設定します。
    /// </summary>
    string Description { get; set; }

    /// <summary>
    /// 関連付けられた <see cref="DirectoryEntry"/> を取得します。
    /// </summary>
    DirectoryEntry Entry { get; }

    /// <summary>
    /// オブジェクトが破棄されているかどうかを取得します。
    /// </summary>
    bool IsDisposed { get; }

    /// <summary>
    /// 名前を取得します。
    /// </summary>
    string Name { get; }
  }
  #endregion

  #region IDomainインターフェイス
  /// <summary>
  /// ドメインの Directory オブジェクトのプロパティを定義します。
  /// </summary>
  public interface IDomain : IDirectory
  {
    /// <summary>
    /// 表示用の所属パスを取得します。
    /// </summary>
    string DisplayPath { get; }
  }
  #endregion

  #region IUserインターフェイス
  /// <summary>
  /// User オブジェクトの共通プロパティを定義します。
  /// </summary>
  public interface IUser : IDirectory
  {
    /// <summary>
    /// アカウントが無効かどうかを取得します。
    /// </summary>
    bool Disabled { get; }

    /// <summary>
    /// フルネーム・表示名を取得または設定します。
    /// </summary>
    string FullName { get; set; }

    /// <summary>
    /// <see cref="Entry"/> の ADSI User オブジェクトを取得します。
    /// </summary>
    IADsUser Native { get; }
  }
  #endregion

  #region IGroupインターフェイス
  /// <summary>
  /// Group オブジェクトの共通プロパティを定義します。
  /// </summary>
  public interface IGroup : IDirectory
  {
    /// <summary>
    /// <see cref="Entry"/> の ADSI Group オブジェクトを取得します。
    /// </summary>
    IADsGroup Native { get; }
  }
  #endregion
}
